var express = require('express');//加载express模块
var path = require('path');//引入path模块
var _ = require('underscore');//引入underscore 需要用到里面extend方法 用另一个对象里面的字段替换掉老的对象里面队形的字段
var port = process.env.PORT || 3000; //设置端口
var app = express(); //启动wep服务器
var bodyParser = require('body-parser');//单独引入body-parser 因为body-parser 和express已经不再一起了
var multer = require('multer');


var jade = require('jade');

var mongoose = require('mongoose');//引入mongoose工具模块连接本地的数据库
mongoose.connect('mongodb://localhost/imooc');//调用mongoose的connect 传入本地的数据库 数据的名字{imooc}
var Movie = require('./models/movie')//在模型里面所编译的模型所以加载模型										

app.set('views','./views/pages');//实例赋给一个变量:views 设置视图的根目录
app.set('view engine','jade');//设置默认的模板引擎
// app.use(express.bodyParser());早期的写法因为现在body-parser 没有整合在express里 所以用下面的写法
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));  //将表单里的数据进行格式化
app.use(multer());

app.use(express.static(path.join(__dirname, 'public')));//静态资源获取  [dirname当前目录的意思]
app.locals.moment = require('moment');//调用moment模块
app.listen(port);//监听这个端口
console.log('服务是否政工启动'+port );
//index page  index路由 并传一个 title的值



app.get('/',function(req,res){
	Movie.fetch(function(err,movies){//调模型的方法 回调方法里拿到返回的movies这个数组
		if(err){//有异常打印出来
			console.log(err);
		}
		res.render('index',{//渲染首页模板同时把查询到的列表赋值给movies
			title:'测试 首页',
			movies: movies
		})
		console.log(movies);
	})
})

//detail page  详情页路由
app.get('/movie/:id',function(req,res){//:id 这个值可以通过req.params 拿到这个参数值
	var id = req.params.id;
	Movie.findById(id, function(err, movie){
		res.render('detail',{
			title:'详情页',
			movie: movie
		})
	})
})
//admin page
app.get('/admin/movie', function(req, res) {
  res.render('admin', {
    title: 'demo1 后台录入页',
    movie: {
      _id: '',
      title: '',
      doctor: '',
      country: '',
      year: '',
      poister: '',
      language: '',
      flash: '',
      summary: ''
    }
  });
});

//admin update movie 更新
app.get('/admin/update/:id', function(req, res){
	var id = req.params.id;
	if (id) {//判断id存在 通过模型拿到数据 传入电影
		Movie.findById(id, function(err, movie){
			//直接渲染表单
			res.render('admin' , {
				title: 'imooc 后台更新页',
				movie: movie
			})
		})
	}
})
//admin post movie 获取从后台录入页post的数据
app.post('/admin/movie/new',function(req, res){//
	console.log(req);
	console.log(req.body.movie);
	var id = req.body.movie._id;
	var movie0bj = req.body.movie;//拿到movie对象
	var _movie;//声明一个movie变量
	//做个判断判断是否新增的或者再次更新的
	console.log('新增或者更新数据id：'+id)
	if(id != undefined){
		//对着条数据进行更新
		console.log('进入更新数据');
		Movie.findById(id, function(err, movie){//查到这条数据
			if(err){
				console.log(err);
			}
			_movie = _.extend(movie,movie0bj);//underscore里面的extend(查询到的对象,新的对象)方法 替换老的对象的对应的地段
			_movie.save(function(err, movie){
				if (err) {
					console.log(err);
				}
				//页面重定向到响应的详情页面
				res.redirect('/movie/'+movie._id);
			})
		})
	}else{//没有_id 新增数据
		_movie = new Movie({
			doctor: movie0bj.doctor,
			title: movie0bj.title,
			country: movie0bj.country,
			language: movie0bj.language,
			year: movie0bj.year,
			poister: movie0bj.poister,
			summary: movie0bj.summary,
			flash: movie0bj.flash
		})
		_movie.save(function(err, movie){
			if (err) {
					console.log(err);
				}
				res.redirect('/movie/'+movie._id); 
		})
	}
})

//list page  列表页路由
app.get('/admin/list',function(req, res){
	Movie.fetch(function(err,movies){//调模型的方法 回调方法里拿到返回的movies这个数组
		if(err){//有异常打印出来
			console.log(err);
		}
		console.log(movies);
		res.render('list',{
			title:'测试 列表页',
			movies: movies
		})
	})
})
//list  delete movie  删除功能
app.delete('/admin/list', function(req, res){
	var id = req.query.id;
	console.log(req);
	console.log(req.query.id);
	console.log(req.query);
	if(id){
		Movie.remove({_id:id}, function(err, movie){
			if(err){
				console.log(err);
			}else{
				res.json({success: 1})
			}
		})
	}
})